/**
 * 第15章 并发基础知识
 * 代码清单-p2ch15a-430页a：通过继承Thread创建线程 {@link top.kaoshanji.p2ch15a.HelloThread}
 * 代码清单-p2ch15a-432页a：通过实现Runnable创建线程 {@link top.kaoshanji.p2ch15a.HelloRunnable}
 * 代码清单-p2ch15a-435页a：共享内存示例 {@link top.kaoshanji.p2ch15a.ShareMemoryDemo}
 * 代码清单-p2ch15a-436页a：竞态条件示例 {@link top.kaoshanji.p2ch15a.CounterThread}
 * 代码清单-p2ch15a-437页a：内存可见性示例 {@link top.kaoshanji.p2ch15a.VisibilityDemo}
 * 代码清单-p2ch15a-439页a：用synchronized修饰的Counter类 {@link top.kaoshanji.p2ch15a.Counter}
 * 代码清单-p2ch15a-440页a：多线程访问synchronized保护的Counter对象 {@link top.kaoshanji.p2ch15a.CounterThread1}
 * 代码清单-p2ch15a-441页a：synchronized修饰静态方法 {@link top.kaoshanji.p2ch15a.StaticCounter}
 * 代码清单-p2ch15a-442页a：synchronized代码块修饰的Counter类 {@link top.kaoshanji.p2ch15a.Counter2}
 * 代码清单-p2ch15a-442页b：synchronized代码块修饰的StaticCounter类 {@link top.kaoshanji.p2ch15a.StaticCounter2}
 * 代码清单-p2ch15a-443页a：使用单独对象作为锁的Counter类 {@link top.kaoshanji.p2ch15a.Counter3}
 * 代码清单-p2ch15a-444页a：死锁示例 {@link top.kaoshanji.p2ch15a.DeadLockDemo}
 * author kaoshanji
 * ^_^
 * create time 2025/2/23 10:50
 */
package top.kaoshanji.p2ch15a;